package com.hy.hash;

import java.util.HashSet;
import java.util.Set;

public class IsHappy {

    /**
     * 第202题. 快乐数
     * 力扣题目链接
     *
     * 编写一个算法来判断一个数 n 是不是快乐数。
     *
     * 「快乐数」定义为：对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和，然后重复这个过程直到这个数变为 1，
     *  也可能是 无限循环 但始终变不到 1。如果 可以变为  1，那么这个数就是快乐数。
     *
     *  2 8 → 2²+8²=68 → 6²+8²=100 → 1²+0²+0²=1
     *  3 2 → 3²+2²=13 → 1²+3²=10 → 1²+0²=1
     *
     * 输入：19
     * 输出：true
     * 解释：
     * 1^2 + 9^2 = 82
     * 8^2 + 2^2 = 68
     * 6^2 + 8^2 = 100
     * 1^2 + 0^2 + 0^2 = 1
     * 如果 n 是快乐数就返回 True ；不是，则返回 False 。
     */

    static boolean isHappy(int num){
        Set<Object> record = new HashSet<>();
        while (num != 1 && !record.contains(num)){
            record.add(num);
            num = getNextNum(num);
        }
        return num == 1 ? true : false;
    }

    static int getNextNum(int num){
        int res = 0;
        while (num > 0){
            int temp = num % 10;
            res += temp * temp;
            num = num/10;
        }
        return res;
    }

    public static void main(String[] args) {
        int num = 109;
        System.out.println("是否快乐数： "+isHappy(num));
    }
}
